iT邦幫忙

2023 iThome 鐵人賽

0
DevOps

跟著菜鳥手把手用Docker建立服務系列 第 22

Day22 - 菜鳥們一起探討實作的 Docker Compose

  • 分享至 

  • xImage
  •  

前面幾天我們嘗試了 Dockerfile 跟 Docker Compose 去實現我們所設計的系統,你實作會發現這兩個其實相輔相成,可能在設定、管理、執行這兩個都有適合的用處,就看大家自己如何去分配/images/emoticon/emoticon12.gif


我們先來一一講解 docker-compose.yml 的內容

version: "3.8"

services:
  mysql-server:
    build:
      context: ./mysql
    image: mysql-image:latest
    container_name: mysql-contianer
    environment:
      - MYSQL_DATABASE=ItDB
      - MYSQL_USER=ITUser
      - MYSQL_PASSWORD="Mysql Password"
      - MYSQL_ROOT_PASSWORD="Mysql Root Password"
    volumes:
      - mysqlVolumes:/var/log  
    networks:
      - composeBridge
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 15s
      timeout: 5s
      retries: 3
      
  redis-server:
    build:
      context: ./redis
    image: redis-image:latest
    container_name: redis-container
    command: redis-server /usr/local/etc/redis/redis.conf
    depends_on: 
      - mysql-server
    networks:
      - composeBridge

  django-python-server:
    build:
      context: ./DjangoWeb
    image: django-python-image:latest 
    container_name: django-python-container
    depends_on: 
      mysql-server:
        condition: service_healthy
    networks:
      - composeBridge

  nginx-server:
    build:
      context: ./nginx
    image: nginx-image:latest
    container_name: nginx-container
    ports:
      - "127.0.0.1:8003:80"
    depends_on:
      - django-python-server
    networks:
      - composeBridge

volumes: 
  mysqlVolumes:
    name: mysql_volumes

networks:
  composeBridge:
    name: compose_bridge
    driver: bridge
  • build
    • context -> 讀取Dockerfile的路徑
  • imgae -> 命名Image的名字
  • container_name -> 命名Container的名字
  • environment -> 環境變數設定
  • Service.voulumes -> 綁定 voulumes
  • Service.networks -> 綁定 network
    • healthcheck -> Server 健康監控
    • test -> 測試指令
    • interval -> 測試週期
    • timeout -> timeout設定
    • retries -> 重試測試次數
  • depends_on -> 設定等待其他Server啟動完成後,再啟動自己的Server
    • condition -> 設定什麼情況條件完成後,啟動自己的Server
  • ports -> 設定 Server Port
  • volumes -> 建立 volumes
  • networks -> 建立 networks

如果我們Dockerfile 跟 Docker Compose 並用會發現效率會好多

  1. docker-compose up -d指令 直接建立 Image 並且啟動 Container
  2. networks 自動建立,如果不用Docker Compose就要先輸入Docker指令去建立networks
  3. 當你 docker-compose.yml 有做編輯,直接重新下docker-compose up -d指令,就會針對你修改的Service重新啟動Container
  4. 如果你改 Dockerfile的話,就必須把Image刪掉,並且直接重新下docker-compose up -d指令,就會重新建立Image並且起重新啟動Container

真的要自己實作Dockerfile 跟 Docker Compose才會感覺差別在哪,而且也知道如何管理相關docker的資料/images/emoticon/emoticon30.gif


上一篇
Day21 - 菜鳥們把所學的實作做起來 Docker Compose 篇
下一篇
Day23 - 跟菜鳥們分享我實作 Docker Compose 遇到的問題
系列文
跟著菜鳥手把手用Docker建立服務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言